/* 
 * SiliparServiceSupport.java
 * 
 * Data de criação: 12/02/2010
 * 
 * O2SOLUTIONS - SOLUÇÕES EM TECNOLOGIA DA INFORMAÇÃO. 
 *
 */
package br.com.o2solutions.core.service;

import java.io.Serializable;
import java.util.List;

import br.com.o2solutions.core.business.BasicBusiness;
import br.com.o2solutions.core.exception.BusinessException;

/**
 * Classe responsável por implementar parte dos Serviços Comuns do Sistema.
 * Todas as operações de consulta são realizadas utilizando o proprio objeto de
 * acesso a dados (DAO). As operações de atualização de dados (remove, update ou
 * save) são executadas por objetos de negócio.
 * 
 * @author osvaldeir
 * @since 12/02/2010
 * 
 */
public abstract class ServiceSupport<T, S extends BasicBusiness<T>> implements
		Service<T>, Serializable {

	private static final long serialVersionUID = -9160515710440343209L;

	protected S businessObject;

	/**
	 * {@inheritDoc}
	 */
	public void save(T entity) throws BusinessException {
		getBusinessObject().save(entity);
	}

	/**
	 * {@inheritDoc}
	 */
	public void remove(T entity) throws BusinessException {
		getBusinessObject().remove(entity);
	}

	/**
	 * Retorna o(a) businessObject.
	 * 
	 * @return S
	 */
	public S getBusinessObject() {
		return businessObject;
	}

	/**
	 * Atribui o(a) businessObject.
	 * 
	 * @param businessObject
	 *            S
	 */
	public void setBusinessObject(S businessObject) {
		this.businessObject = businessObject;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public List<T> findAll() {
		return getBusinessObject().getDataBaseIntegration().findAll();
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public List<T> findByCriterio(T entity) {
		return getBusinessObject().getDataBaseIntegration().findByCriterio(
				entity);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public T findById(Serializable id) {
		return getBusinessObject().getDataBaseIntegration().findById(id);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void update(T entity) throws BusinessException {
		getBusinessObject().update(entity);
	}

}
